package Chat;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.rmi.RemoteException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ChatGUI extends JFrame {

	private static final long serialVersionUID = 1L;

	private JTextArea eingabe;
	private JTextArea ausgabe;
	private JScrollPane eingabeScroll;
	private JScrollPane ausgabeScroll;
	private JPanel eingabePanel;
	private JPanel ausgabePanel;

	public JButton senden;

	public ChatGUI(final ChatService server, final String user) {
		
		//GUI: Chatfenster mit seinen Komponenten
		super("Chatfenster");

		eingabe = new JTextArea(4, 20);
		ausgabe = new JTextArea(10, 27);
		senden = new JButton("Senden");
		eingabePanel = new JPanel();
		eingabeScroll = new JScrollPane(eingabe, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		eingabePanel.add(eingabeScroll);
		ausgabePanel = new JPanel();
		ausgabeScroll = new JScrollPane(ausgabe, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		ausgabePanel.add(ausgabeScroll);

		ausgabe.setFocusable(false);
		ausgabe.setEditable(false);

		this.setLayout(new BorderLayout());

		this.add("Center", eingabePanel);
		this.add("North", ausgabePanel);
		this.add("East", senden);

		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setVisible(true);
		this.pack();
		this.setLocationRelativeTo(null);
		eingabe.requestFocus();

		// Bei Eingabe durch den Senden Button
		senden.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				//Dem Nachrichtentext den Nutzernamen voranstellen
				final String msg = "<" + user + ">" + eingabe.getText();

				Thread t = new Thread() {
					@Override
					public void run() {
						//Nachricht an Server schicken
						try {
							server.send(msg);
						} catch (RemoteException e) {
							e.printStackTrace();
						}
					}
				};
				t.start();
				eingabe.setText("");
				eingabe.requestFocus();
			}
		});

		// Bei Eingabe durch STRG + Enter
		eingabe.addKeyListener(new KeyListener() {

			public void keyPressed(KeyEvent e) {
				if (e.isControlDown() && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
					senden.doClick();//Buttonclick wird "vom System ausgeführt" -> Actionlistener wird aktiv
				}
			}

			public void keyTyped(KeyEvent e) {
				
			}

			public void keyReleased(KeyEvent e) {

			}
		});

	}

	//Nachricht dem Ausgabebereich hinzufügen
	public void showMessage(String message) {
		ausgabe.append(message + "\n");
	}

}
